package websocket

import (
	"fmt"
	"golang.org/x/net/websocket"
	"im/im-server/app/data"
	"im/im-server/app/util"
	util2 "im/im-server/util"
	ser "im/server/websocket"
)

var (
	imCloudAddr string = "ws://127.0.0.1:8000/ws" // todo 连接 im-cloud 的地址
	imCloudOrig string = "http://127.0.0.1"
	serverAddr  string = "127.0.0.1:7000" // todo 本台im-server的地址
	serverUri   string = "/ws"
)

func init() {
	// todo 下面OnXXX方法时接收客服端通过Websocket链接到im-server端的数据处理
	ser.OnOpen = OnOpen
	ser.OnMessage = OnMessage
	ser.OnClose = OnClose
	ser.OnHandSheKe = OnHandSheKe
	//ser.HeartbeatCheckInterval = 6

	ser.NewServer("", "/ws")
	initRegister() // todo 开始向 im-cloud传递信息，将自己的信息通过im-cloud注册存储到redis
}

func initRegister() {
	var err error
	go util.Retry(func() bool {
		conn, err := websocket.Dial(imCloudAddr, "", imCloudOrig)
		if err != nil {
			return false
		}
		send(conn)
		return true
	}, []int{1, 3, 5, 10})
	if err != nil {
		fmt.Println("===>>> initRegister ， ", err)
	}
}

func send(conn *websocket.Conn) {
	// 心跳检测
	ht := true
	ser.SendJson(conn, map[string]string{
		"method":  "register",
		"sername": "im-6000",
		"addr":    "ws://" + serverAddr + serverUri,
	})

	reply := new(data.Reply)
	ser.RecJson(conn, reply) // todo 接收im-cloud返回的数据，实际上要进行判断
	fmt.Println(reply)
	if reply.Code != 200 {
		conn.Close()
		return
	}

	if ht {
		util2.Timer(func() {
			conn.Write([]byte{ser.Req})
		}, 4)
	}
}
